package com.dao;

import com.entity.Order;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**  */
public interface OrderDao {
  /** 订单状态常量 */
  int ALL = 0;

  int WAIT_PAY = 1;
  int WAIT_DELIVERY = 2;
  int WAIT_GOODS = 3;
  int WAIT_COMMENT = 4;
  int COMPLETE = 5;

  /**
   * 获取所有订单的数量
   *
   * @return
   */
  int selectAllOrderCount(@Param("orderStatus") int orderStatus);

  List<Order> selectOrdersByIds(@Param("orderIds") List<String> orderIds);

  int insertAOrder(
      @Param("orderId") String orderId,
      @Param("userId") String userId,
      @Param("goodId") String goodId,
      @Param("goodNum") int goodNum,
      @Param("tradeWay") String tradeWay,
      @Param("grId") String grId,
      @Param("remark") String remark);

  List<Order> selectAllOrders(
      @Param("orderStatus") int orderStatus,
      @Param("startIndex") int startIndex,
      @Param("num") int num);

  /**
   * 获取卖家或买家的订单数量
   *
   * @param userId 用户编号
   * @param orderStatus 订单状态（订单状态为0表示全部订单)
   * @param isSeller 是否是卖家
   * @return 对应状态的订单数量
   */
  int selectBuyerOrSellerOrderCount(
      @Param("userId") String userId,
      @Param("orderStatus") int orderStatus,
      @Param("isSeller") boolean isSeller);

  /**
   * 获取卖家或买家的订单列表
   *
   * @param userId 用户编号
   * @param orderStatus 订单状态
   * @param startIndex 开始索引
   * @param num 数量
   * @param isSeller 是否是卖家
   * @return 对应状态的订单列表
   */
  List<Order> selectBuyerOrSellerOrders(
      @Param("userId") String userId,
      @Param("orderStatus") int orderStatus,
      @Param("startIndex") int startIndex,
      @Param("num") int num,
      @Param("isSeller") boolean isSeller);

  int deleteOrder(@Param("orderId") String orderId);

  List<Map<String, Object>> selectBuyerSellerId(@Param("orderIds") List<String> orderIds);

  /**
   * 获取所给订单订单列表中当前时间-生成时间最长的分钟数。
   *
   * @param orderIds 订单编号列表
   * @return 给订单订单列表中当前时间-生成时间最长的分钟数
   */
  int selectWaitPayMaxPastMinutes(@Param("orderIds") List<String> orderIds);

  /**
   * 更新支付信息：订单状态、支付时间
   *
   * @param orderIds 订单编号
   * @return 1/0
   */
  int updatePayInfo(@Param("orderIds") List<String> orderIds);

  /**
   * 订单支付成功后修改对应商品的数量或状态，
   *
   * @param orderId 订单编号
   * @return 若更新后数量为0，返回1，否则返回0
   */
  Integer updateGoodsCountOrStatus(@Param("orderId") String orderId);

  int selectOrderGoodStatus(@Param("orderId") String orderId);

  int updateDeliveryInfo(
      @Param("orderId") String orderId,
      @Param("courierCompany") String courierCompany,
      @Param("courierNumber") String courierNumber);

  int updateConfirmGoodsInfo(@Param("orderId") String orderId);

  int updateOrder(
      @Param("orderId") String orderId,
      @Param("oldStatus") int oldStatus,
      @Param("newStatus") int newStatus);

  List<String> selectGoodsOnOrder(@Param("userId") String userId);
}
